package persistencia;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import modeloDatos.Seguimiento;

public class DAOSeguimientos {
	
	private Connection conn;

	public DAOSeguimientos() {
		
	}
	
	public void finalize(){
        ConnectionManager.getInstance().checkIn(conn);
    }
	
	public List<Seguimiento> seguimientosDeClientes(Integer idC){
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "SELECT s.idSeguimiento, s.idClienteEmpresa, s.fecha, s.idTipoSeguimiento, ts.descripcion, s.observaciones FROM seguimientoempresa s, tiposseguimiento ts WHERE s.IdTipoSeguimiento=ts.idTipoSeguimiento AND s.idClienteEmpresa=?";
        ResultSet result = null;
        List<Seguimiento> listaS = new LinkedList<Seguimiento>();
		try {
			stmt = conn.prepareStatement(sql);
			stmt.setInt(1, idC);
			result = stmt.executeQuery();
			while (result.next()) {
				Integer idS = result.getInt("idSeguimiento");
				Integer idCE = result.getInt("idClienteEmpresa");
				Date f = result.getDate("fecha");
				Integer idTS = result.getInt("idTipoSeguimiento");
				String desc = result.getString("descripcion");
				String o = result.getString("observaciones");
				listaS.add(new Seguimiento(idS, idCE, f, idTS, desc, o));
			}
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (result != null) {
					result.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		return listaS;
	}
	
	public List<String> tiposSeguimiento(){
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "SELECT * FROM tiposseguimiento";
        ResultSet result = null;
        List<String> listaTS = new LinkedList<String>();
		try {
			stmt = conn.prepareStatement(sql);
			result = stmt.executeQuery();
			while (result.next()) {
				String d = result.getString("descripcion");
				listaTS.add(d);
			}
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (result != null) {
					result.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		return listaTS;
	}
	
	public Boolean insertarSeguimiento(Integer idC,Date fecha,String tipo, String obs){
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "INSERT INTO seguimientoempresa (idClienteEmpresa,fecha,idTipoSeguimiento,observaciones) VALUES (?,?,(SELECT idTipoSeguimiento FROM tiposseguimiento WHERE descripcion=?),?)";
		try {
			stmt = conn.prepareStatement(sql);
			stmt.setInt(1, idC);
			stmt.setDate(2, fecha);
			stmt.setString(3, tipo);
			stmt.setString(4, obs);
			stmt.executeUpdate();
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		return true;
	}

}
